import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;

/**
 * Classe representant une ligne a dessiner
 * @author Simon Castro
 * @author Renaud Vincent
 *
 */
public class Ligne extends AbstractForme{
	
	//Donnees correspondant aux informations obtenues par le serveur
	private int x1;
	private int x2;
	private int y1;
	private int y2;
	private int nseq;
	
	//Largeur et hauteur de la region rectangulaire decrite par les deux points
	private int hauteurRegion;
	private int largeurRegion;
	
	/**
	 * 
	 * @param x1
	 * @param y1
	 * @param x2
	 * @param y2
	 * @param nseq
	 */
	public Ligne(int x1,int y1,int x2,int y2, int nseq){
		this.x1 = x1;
		this.x2 = x2;
		this.y1 = y1;
		this.y2 = y2;
		this.nseq = nseq;
		
		//Calcul de la largeur selon l'emplacement des points
		if (x1<x2)
			largeurRegion = x2-x1;
		else
			largeurRegion = x1-x2;
		
		//Calcul de la hauteur selon l'emplacement des points
		if (y1<y2)
			hauteurRegion = y2-y1;
		else
			hauteurRegion = y1-y2;	
	}
	
	public int getX1(){
		return this.x1;
	}
	
	public int getX2(){
		return this.x2;
	}
	
	public int getY1(){
		return this.y1;
	}
	
	public int getY2(){
		return this.y2;
	}

	@Override
	void draw(Graphics g, int xDepart, int yDepart) {
		g.setColor(Color.ORANGE);
		g.drawLine(xDepart, yDepart, xDepart+largeurRegion, yDepart+hauteurRegion);
		
		//Bordure
		g.setColor(Color.GRAY);
		((Graphics2D) g).setStroke(new BasicStroke(LARGEUR_P, DECO_P, COIN_P, 
	            LIMITE_P, PATTERN_P, DEBUT_P));
		
		((Graphics2D) g).drawRect(xDepart, yDepart,largeurRegion, hauteurRegion);
	
	}

    /**
     * Methode retournant l'aire d'une ligne, soit sa longeur multipliee
     * par 1 pixel. Sa longeur est trouvee grace a la regle de pythagore
     * a^2 = b^2 + c^2
     * @return L'aire de la ligne
     */
	public float getAire() {
		return (float) Math.sqrt(Math.pow(hauteurRegion, 2) + Math.pow(largeurRegion, 2));
	}
	
	public int getNseq(){
		return this.nseq;
	}

	@Override
	int getCodeType() {
		return 5;
	}

	@Override
	int getDistanceMax() {
		return (int)getAire();
	}

}
